package com.yichang.comisiones.service.impl;

import com.yichang.comisiones.dao.UsuarioDao;
import com.yichang.comisiones.dao.impl.UsuarioDaoImpl;
import com.yichang.comisiones.dto.UsuarioDTO;
import com.yichang.comisiones.service.UsuarioService;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.stereotype.Service;

/**
 *
 * @author gian
 *
 */
@Service
public class UsuarioServiceImpl implements UsuarioService {

    private static Logger log = LoggerFactory.getLogger(UsuarioDaoImpl.class);    
    
    @Autowired
    private UsuarioDao usuarioDao;
    
    @Autowired
    private Md5PasswordEncoder md5PasswordEncoder;

    @Override
    public Integer insertar(UsuarioDTO usuario) throws Exception {
        if (usuario.getPassword().length() > 4) {
            log.info("Creando usuario");
            usuario.setPassword(md5PasswordEncoder.encodePassword(usuario.getPassword(),null));
            if (usuario.getEmpleado().getIdEmpleado() != null) {
                if (usuarioDao.buscarPorCodigo(usuario.getEmpleado().getIdEmpleado()) == null) {
                    return usuarioDao.insertar(usuario);
                } else {
                    throw new Exception("El usuario se encuentra registrado en el sistema");
                }
            } else {
                return usuarioDao.insertar(usuario);
            }
        }
        return null;
    }

    @Override
    public void actualizar(UsuarioDTO usuario) {
        log.info("Actualizando usuario");
        usuarioDao.actualizar(usuario);
    }

    @Override
    public void eliminar(UsuarioDTO usuario) {
        log.info("Eliminando usuario");
        usuarioDao.eliminar(usuario);
    }

    @Override
    public List<UsuarioDTO> buscarTodos(boolean admin) {
        log.info("Buscando todos los usuarios");
        return usuarioDao.buscarTodos(admin);
    }

    @Override
    public UsuarioDTO buscar(Integer id) {
        log.info("Buscar usuario por id");
        return usuarioDao.buscar(id);
    }

    @Override
    public List<UsuarioDTO> buscarPorNombre(String nombre) {
        return usuarioDao.buscarPorNombre(nombre);
    }
    
    @Override
    public UsuarioDTO buscarPorCorreo(String correo) {
        return usuarioDao.buscarPorCorreo(correo);
    }    
    
    @Override
    public UsuarioDTO buscarPorCodigo(String codigo) {
        return usuarioDao.buscarPorCodigo(codigo);
    }
    
    @Override
    public void changePassword(UsuarioDTO usuario) {
        String newPassword = md5PasswordEncoder.encodePassword(usuario.getPassword(),null);
        usuarioDao.changePassword(usuario.getId(),newPassword);
    }
}
